最全MySQL数据类型详解 您所在的位置:网站首页 mysql长整数类型 表示 最全MySQL数据类型详解

最全MySQL数据类型详解

2024-03-24 07:12| 来源: 网络整理| 查看: 265

一、概述

1、MySQL中的数据类型 在这里插入图片描述 2、常见数据类型的属性 在这里插入图片描述

二、各种数据类型精讲

1、整数类型 1.1 整数类型介绍

整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。它们的区别如下表所示: 在这里插入图片描述 1.2 可选属性

1.2.1 M

M 表示显示宽度,M的取值范围是(0, 255)。例如,int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度。该项功能需要配合“ ZEROFILL ”使用,表示用“0”填满宽度,否则指定显示宽度无效.当设置了显示宽度,插入的数据宽度超过显示宽度限制时,不会对插入的数据有任何影响,还是按照类型的实际宽度进行保存,即 显示宽度与类型可以存储的 值范围无关 。从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性。

整型数据类型可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认的宽度值。

TINYINT有符号数和无符号数的取值范围分别为-128~ 127和0~255,由于负号占了一个数字位,因此TINYINT默认的显示宽度为4。同理,其他整数类型的默认显示宽度与其有符号数的最小值的宽度相同。

1.2.2 UNSIGNED

UNSIGNED表示无符号类型(非负),所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),无符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设置为无符号类型。

int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)。

1.2.3 ZEROFILL

ZEROFILL 表示 0填充,(如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性),如果指定了ZEROFILL只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可。

原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 bytes 的存储空间。也就是说,int(M),必须和UNSIGNED ZEROFILL一起使用才有意义。如果整数值超过M位,就按照实际位数存储。只是无须再用字符 0 进行填充。

1.3 应用场景

(1)TINYINT :一般用于枚举数据,比如系统设定取值范围很小且固定的场景。 (2)SMALLINT :可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。 (3)MEDIUMINT :用于较大整数的计算,比如车站每日的客流量等。 (4)INT、INTEGER :取值范围足够大,一般情况下不用考虑超限问题,用得最多。比如商品编号。 (5)BIGINT :只有当你处理特别巨大的整数时才会用到。比如双十一的交易量、大型门户网站点击量、证券公司衍生产品持仓等。

1.4 举例

建库和建表语句:

# 创建数据库时指明字符集 CREATE DATABASE IF NOT EXISTS dbtest1 CHARACTER SET 'utf8'; SHOW CREATE DATABASE dbtest1; USE dbtest1; # 创建表时指明表的字符集 CREATE TABLE test1( f1 TINYINT, f2 SMALLINT, f3 MEDIUMINT, f4 INT, f5 BIGINT )CHARACTER SET 'utf8'; CREATE TABLE test2( f1 INT, f2 INT(5), # f1和f2在最终的显示效果是一样的,括号中的数字不影响该数据类型本身的显示位数 f3 INT(5) ZEROFILL # 显示宽度为5。当insert的值不足5位时,使用0填充;当使用ZEROFILL时,自动会添加UNSIGNED ); CREATE TABLE test3( f1 INT UNSIGNED );

测试语句:

USE dbtest1; # SHOW可以用来查看创建语句(如下)和查看数据库和表(SHOW DATABAS 数据库名;/SHOW TABLE 表名;) SHOW CREATE TABLE test1; # DESC只能用来查看表结构 DESC test1; INSERT INTO test1(f1) VALUES(1),(-1),(-128),(127); SELECT * FROM test1; # 报错:Out of range value for column 'f1' at row 1(TINYINT的范围为-128到127,其他类型同理) INSERT INTO test1(f1) VALUES(128); NSERT INTO test2(f1,f2) VALUES (123,123),(123456,123456); SELECT * FROM test2; INSERT INTO test2(f3) VALUES (123),(123456); SELECT * FROM test2; # 注意Navicat中不显示自动补零的效果 INSERT INTO test3 VALUES(1234567); SELECT * FROM test3;

2、浮点类型 2.1 浮点类型介绍

MySQL支持的浮点数类型,分别是 FLOAT、DOUBLE、REAL。其中,FLOAT 表示单精度浮点数;DOUBLE 表示双精度浮点数;REAL默认就是DOUBLE。如果将SQL 模式设定为启用“ REAL_AS_FLOAT ”,MySQL 认为 REAL 是 FLOAT。启用“REAL_AS_FLOAT”,可以通过以下 SQL 语句实现:

SET sql_mode = “REAL_AS_FLOAT”;

在这里插入图片描述 FLOAT和DOUBLE的区别?

FLOAT占用字节数少,取值范围小;DOUBLE占用字节数多,取值范围大。

为什么浮点数类型的无符号数取值范围,只相当于有符号数取值范围的一半,即只相当于有符号数取值范围大于等于零的部分?(对比上面的整数类型,其无符号类型是有符号类型的两倍)

MySQL 存储浮点数的格式为: 符号(S) 、 尾数(M) 和 阶码(E) 。因此,无论有没有符号,MySQL 的浮 点数都会存储表示符号的部分。因此, 所谓的无符号数取值范围,其实就是有符号数取值范围大于等于 零的部分。

2.2 数据精度说明

(1)对于浮点类型,在MySQL中单精度值使用 4 个字节,双精度值使用 8 个字节。 (2)MySQL允许使用 非标准语法 (其他数据库未必支持,因此如果涉及到数据迁移,则最好不要这么用): FLOAT(M,D) 或 DOUBLE(M,D) 。这里,M称为精度 ,D称为标度 。(M,D)中 M=整数位+小数位,D=小数位。 D



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有